Euler Problem 44

Pentagonal numbers are generated by the formula, $P_n=n(3n−1)/2$. The first ten pentagonal numbers are:

1, 5, 12, 22, 35, 51, 70, 92, 117, 145, ...

It can be seen that $P_4 + P_7 = 22 + 70 = 92 = P_8$. However, their difference, $70 - 22 = 48$, is not pentagonal.

Find the pair of pentagonal numbers, $P_j$ and $P_k$, for which their sum and difference are pentagonal and $D = |P_k − P_j|$ is minimised; what is the value of D?


In [1]:
def search():
    N = 10000
    penta = [n*(3*n-1)//2 for n in range(1, N+1)]
    penta_set = set(penta)
    Pn = penta[N-1]
    for i in range(1, N):
        D = penta[i]
        for j in range(i):
            Pj = penta[j]
            Pk = Pj + D
            S = Pj + Pk
            if S > Pn:
                print("Fail")
                return
            if Pk in penta_set and S in penta_set:
                print(D)
                return
search()


5482660

In [ ]: